package cn.ware.house.interfaces.entity;

import cn.ware.house.interfaces.entity.goods.Product;

import java.time.LocalDateTime;

/**
 * 出库记录实体类，对应数据库中的`outbound_record`表，用于封装商品出库相关的信息。
 * 该类中关联了 `Warehouse` 和 `Product` 实体类，便于获取更全面的出库操作相关信息。
 */
public class OutboundRecord {
    /**
     * 出库记录编号，唯一标识每次的出库操作，自增长字段，对应数据库表中的`outbound_id`字段。
     * 在数据库中作为自增长的整数类型，是每条出库记录的唯一标识符，便于数据库层面的操作及关联查询等。
     */
    private Integer outboundId;
    /**
     * 关联的仓库实体对象，对应数据库中的 `warehouse` 表，指明商品出库的仓库信息。
     */
    private Warehouse warehouse;
    /**
     * 关联的商品实体对象，对应数据库中的 `product` 表，确定出库的具体商品详情。
     */
    private Product product;
    /**
     * 出库数量，本次出库的商品数量，对应数据库表中的`outbound_quantity`字段。
     * 以整数类型表示本次出库操作涉及的商品数量。
     */
    private Integer outboundQuantity;
    /**
     * 出库时间，记录商品实际出库的时间点，对应数据库表中的`outbound_date`字段。
     * 使用 `LocalDateTime` 类型来准确记录时间信息。
     */
    private LocalDateTime outboundDate;
    /**
     * 接收方，商品出库后交付的对象，例如具体门店、客户等，对应数据库表中的`receiver`字段。
     * 是一个长度不超过50个字符的字符串，记录商品的接收方信息。
     */
    private String receiver;

    public Integer getOutboundId() {
        return outboundId;
    }

    public void setOutboundId(Integer outboundId) {
        this.outboundId = outboundId;
    }

    public Warehouse getWarehouse() {
        return warehouse;
    }

    public void setWarehouse(Warehouse warehouse) {
        this.warehouse = warehouse;
    }

    public Product getProduct() {
        return product;
    }

    public void setProduct(Product product) {
        this.product = product;
    }

    public Integer getOutboundQuantity() {
        return outboundQuantity;
    }

    public void setOutboundQuantity(Integer outboundQuantity) {
        this.outboundQuantity = outboundQuantity;
    }

    public LocalDateTime getOutboundDate() {
        return outboundDate;
    }

    public void setOutboundDate(LocalDateTime outboundDate) {
        this.outboundDate = outboundDate;
    }

    public String getReceiver() {
        return receiver;
    }

    public void setReceiver(String receiver) {
        this.receiver = receiver;
    }

    @Override
    public String toString() {
        return "OutboundRecord{" +
                "outboundId=" + outboundId +
                ", warehouse=" + warehouse +
                ", product=" + product +
                ", outboundQuantity=" + outboundQuantity +
                ", outboundDate=" + outboundDate +
                ", receiver='" + receiver + '\'' +
                '}';
    }
}